/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Miscelaneo.TiposGenericos.Demo;
import java.util.ArrayList;
/**
 *
 * @author Ronald
 */
public class Lista <E>{
    private E elemento;
    private Lista<E> subLista;
    public Lista() {
        this.elemento = null;
        this.subLista = null;
    }
    public Lista(E elemento, Lista<E> subLista) {
        this.elemento = elemento;
        this.subLista = subLista;
    }
    public E getElemento() {
        return elemento;
    }
    public void setElemento(E elemento) {
        this.elemento = elemento;
    }
    public Lista<E> getSubLista() {
        return subLista;
    }
    public void setSubLista(Lista<E> subLista) {
        this.subLista = subLista;
    }
    public boolean EsVacia(){
        return (elemento==null && subLista == null);
    }
    public void Agregar(E elemento){
        if (EsVacia()) {
            this.elemento = elemento;
            subLista = new Lista<E>();
        }
        else 
            subLista.Agregar(elemento);
    }
    public E remove(int index){
        if (index == 0){
            E aux = elemento;
            elemento = subLista.getElemento();
            subLista = subLista.getSubLista();
            return aux;
        }
        else return subLista.remove(index--);
    }
    public int size(){
        return  (EsVacia()) ? 0: 1 + subLista.size();
    }
    public E get (int index){
       return (index ==0 ) ? elemento:subLista.get(index--);
    }
    @Override
    public String toString() {
        return elemento.toString() ;
    }
    
}
